// #include "../include/TcpServer.h"
// #include <iostream>
// #include <string>

// using PtrConnection = std::shared_ptr<Connection>;
// class EchoServer
// {
// public:
//     EchoServer(EventLoop *loop, uint16_t port)
//         : _server(loop, port)
//     {
//         _server.setThreadCount(8);
//         _server.EnableInactiveRelease(30);
//         _server.SetConnectedCallBack(std::bind(&EchoServer::OnConnection, this, std::placeholders::_1));
//         _server.SetMessageCallBack(std::bind(&EchoServer::OnMessage, this, std::placeholders::_1, std::placeholders::_2));
//         _server.SetClosedCallBack(std::bind(&EchoServer::OnClose, this, std::placeholders::_1));
//     }

//     void Start()
//     {
//         _server.Start();
//     }

// private:
//     void OnConnection(const PtrConnection &conn)
//     {
//         if (conn->getConnected())
//         {
//             // 减少日志输出以提升性能
//         }
//     }

//     void OnMessage(const PtrConnection &conn, Buffer *buffer)
//     {
//         size_t readable = buffer->ReadableSpace();
//         std::string msg = buffer->ReadAsStringAndPop(readable);
//         conn->Send(msg.c_str(), msg.length());
//     }

//     void OnClose(const PtrConnection &conn)
//     {
//         // 减少日志输出以提升性能
//     }

// private:
//     TcpServer _server;
// };

#include "../include/TcpServer.h"
static NetWork nw;
class EchoServer
{
private:
    TcpServer _server;

private:
    void OnConnected(const PtrConnection &conn)
    {
        DBG_LOG("NEW CONNECTION:%p", conn.get());
    }
    void OnClosed(const PtrConnection &conn)
    {
        DBG_LOG("CLOSE CONNECTION:%p", conn.get());
    }
    void OnMessage(const PtrConnection &conn, Buffer *buf)
    {
        // 先读取消息内容用于判断协议（在移动读指针之前）
        std::string msg(buf->getReadOffset(), buf->ReadableSpace());

        // Echo 回数据
        conn->Send(buf->getReadOffset(), buf->ReadableSpace());
        buf->MoveReadOffset(buf->ReadableSpace());
        conn->ShutDown();

        // // 智能连接管理策略：
        // // 1. 检测到 HTTP 请求（短连接协议）-> 立即关闭，提高吞吐量
        // // 2. 普通 Echo 请求（长连接场景）-> 保持连接，依靠超时清理
        // // 这样既能应对 WebBench 等 HTTP 压测工具，又能支持长连接场景

        // if (msg.find("HTTP") != std::string::npos ||
        //     msg.find("GET") == 0 ||
        //     msg.find("POST") == 0) {
        //     // HTTP 请求，使用短连接模式
        //     conn->ShutDown();
        // }
        // 否则保持连接打开，依靠 10 秒非活跃超时自动清理
    }

public:
    EchoServer(int port) : _server(port)
    {
        _server.setThreadCount(4); // 优化：从 4 增加到 8，提高并发处理能力
        _server.EnableInactiveRelease(10);
        _server.SetClosedCallBack(std::bind(&EchoServer::OnClosed, this, std::placeholders::_1));
        _server.SetConnectedCallBack(std::bind(&EchoServer::OnConnected, this, std::placeholders::_1));
        _server.SetMessageCallBack(std::bind(&EchoServer::OnMessage, this, std::placeholders::_1, std::placeholders::_2));
    }
    void Start() { _server.Start(); }
};